package com.hnkywl.sts.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * Created by HLRJ1 on 2015/8/25.
 */
public class DateUtil {

    private static SimpleDateFormat getDateParser(String pattern) {
        return new SimpleDateFormat(pattern);
    }

    public static String getDate(Date dd) {
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
        return ft.format(dd);
    }

    public static String getMonthDate(Date dd) {
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM");
        return ft.format(dd);
    }

    public static long getQuot(String time1, String time2) {
        long quot = 0;
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date1 = ft.parse(time1);
            Date date2 = ft.parse(time2);
            quot = date1.getTime() - date2.getTime();
            quot = quot / 1000 / 60 / 60 / 24;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return quot;
    }

    public static long getDay(Date time1, Date time2) {
        long quot;
        quot = time1.getTime() - time2.getTime();
        quot = quot / 1000 / 60 / 60 / 24;
        return quot;
    }

    /**
     * 日期加减天数
     * <p>传入的date对象为空,返回null
     *
     * @param date
     * @param days
     * @return
     */
    public static Date addDays(Date date, int days) {
        if (date == null) {
            return null;
        }
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(5, days);
        return calendar.getTime();
    }

    /**
     * 时间字符串转换为日期
     * <p>自定义格式(例：yyyy-MM-dd)
     *
     * @param dateString
     * @param pattern
     * @return
     */
    public static Date toDate(String dateString, String pattern) {
        Date date = null;
        try {
            date = getDateParser(pattern).parse(dateString);
        } catch (Exception e) {
            return null;
        }
        return date;
    }

    /**
     * 时间字符串转换为日期
     * <p>默认格式(yyyy-MM-dd)
     *
     * @param dateString
     * @return
     */
    public static Date toDate(String dateString) {
        Date date = null;
        try {
            date = getDateParser("yyyy-MM-dd").parse(dateString);
        } catch (Exception e) {
            return null;
        }
        return date;
    }

    /**
     * 时间字符串转换为日期
     * <p>默认格式(yyyy-MM-dd HH:mm:ss)
     *
     * @param dateString
     * @return
     */
    public static Date toDateTime(String dateString) {
        Date date = null;
        try {
            date = getDateParser("yyyy-MM-dd HH:mm:ss").parse(dateString);
        } catch (Exception e) {
            return null;
        }
        return date;
    }

    /**
     * 日期转换为时间字符串
     * <p>自定义格式(例：yyyyMMdd)
     *
     * @param date
     * @param pattern
     * @return
     */
    public static String toDateStr(Date date, String pattern) {
        if (date == null) {
            return "";
        }
        return getDateParser(pattern).format(date);
    }

    /**
     * 日期转换为时间字符串
     * <p>默认格式(yyyy-MM-dd)
     *
     * @param date
     * @return
     */
    public static String toDateStr(Date date) {
        if (date == null) {
            return "";
        }

        return getDateParser("yyyy-MM-dd").format(date);
    }

    /**
     * 获取8位当前日期串
     *
     * @return
     */
    public static String curDateStr8() {
        return getDateParser("yyyyMMdd").format(new Date());
    }

    /**
     * 获取14位当前日期串
     *
     * @return
     */
    public static String curDateStr14() {
        return getDateParser("yyyyMMddHHmmss").format(new Date());
    }

    /**
     * 返回日期格式(yyyyMMdd)
     * <p>解析date字符串时出错,返回null.
     *
     * @param dateStr
     * @return
     */
    public static Date toDate8(String dateStr) {
        Date date = null;
        try {
            date = getDateParser("yyyyMMdd").parse(dateStr);
        } catch (Exception e) {
            return null;
        }
        return date;
    }

    /**
     * 返回日期格式(yyyy-MM-dd)
     * <p>解析date字符串出错时,返回null.
     *
     * @param dateStr
     * @return
     */
    public static Date toDate10(String dateStr) {
        Date date = null;
        try {
            date = getDateParser("yyyy-MM-dd").parse(dateStr);
        } catch (Exception e) {
            return null;
        }
        return date;
    }

    /**
     * 返回日期格式(yyyyMMddHHmmss)
     * <p>解析date字符串出错时,返回null.
     *
     * @param dateStr
     * @return
     */
    public static Date toDateTime14(String dateStr) {
        Date date = null;
        try {
            date = getDateParser("yyyyMMddHHmmss").parse(dateStr);
        } catch (Exception e) {
            return null;
        }
        return date;
    }

    /**
     * 返回日期格式(yyyy-MM-dd HH:mm:ss)
     * <p>解析date字符串出错时,返回null.
     *
     * @param dateStr
     * @return
     */
    public static Date toDateTime19(String dateStr) {
        Date date = null;
        try {
            date = getDateParser("yyyy-MM-dd HH:mm:ss").parse(dateStr);
        } catch (Exception e) {
            return null;
        }
        return date;
    }

    /**
     * 返回日期字符串格式(yyyyMMdd)
     * <p>传入的date对象为空,返回空字符串
     *
     * @param date
     * @return
     */
    public static String toDateStr8(Date date) {
        if (date == null) {
            return "";
        }
        return getDateParser("yyyyMMdd").format(date);
    }

    /**
     * 返回日期字符串格式(yyyy-MM-dd)
     * <p>传入的date对象为空,返回空字符串
     *
     * @param date
     * @return
     */
    public static String toDateStr10(Date date) {
        if (date == null) {
            return "";
        }
        return getDateParser("yyyy-MM-dd").format(date);
    }

    /**
     * 返回日期字符串格式(yyyyMMddHHmmss)
     * <p>传入的date对象为空,返回空字符串
     *
     * @param date
     * @return
     */
    public static String toDateStr14(Date date) {
        if (date == null) {
            return "";
        }
        return getDateParser("yyyyMMddHHmmss").format(date);
    }

    /**
     * 返回日期字符串格式(yyyy-MM-dd HH:mm:ss)
     * <p>传入的date对象为空,返回空字符串
     *
     * @param date
     * @return
     */
    public static String toDateStr19(Date date) {
        if (date == null) {
            return "";
        }
        return getDateParser("yyyy-MM-dd HH:mm:ss").format(date);
    }

    /**
     * 将字符串毫秒转换成yyyy-MM-dd HH:mm:ss
     *
     * @param msec
     * @return
     */
    public static String msecToDateStr(String msec, Long day, boolean bool) {
        if ("".equals(msec) || msec == null) {
            return "";
        } else {
            Date date = new Date(Long.parseLong(msec) * 1000L + day);
            SimpleDateFormat sdf = null;
            if (bool) {
                sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            } else {
                sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            }

            return sdf.format(date);
        }
    }

}
